%matplotlib inline
%config InlineBackend.figure_format='retina'
import matplotlib
import matplotlib.pyplot as plt
import string
import scipy
import Tkinter, tkFileDialog
import numpy as np
import pandas as pd
from scipy.spatial.distance import cdist
import os
import sys
import glob
import cPickle
sys.path.append(os.path.abspath("C:\Users\Scherer Lab E\Documents\GitHub\Python_Data_Analysis"))
from common_functions import *
plt.rcParams['figure.figsize']=[4,3]
store = pd.HDFStore("K:\Pat's_Projects\ParticleTrajectoryData\driven_optical_matter.h5")
data_index = store.index[(store.index['experiment'] == 'Exp11201301') | (store.index['experiment'] == 'Exp12031301')]
def plot_nn_dist_par_perp(data_frame,fit_params,plot_name):
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data_frame,8,1)
print len(ang_sep)
ang_sep=np.array([np.concatenate((ang_sep[v],ang_sep[v+4])) for v in range(len(ang_sep)/2)])
um_conv=6.5/60/1.6/2
print len(ang_sep)
ang_sep_conv=ang_sep*um_conv
#labels=['Parellel','Perpendicular']
print ang_bins
#print ang_sep
labels=[str(v[0])+'-'+str(v[1]) for v in ang_bins]
plt.figure(figsize=[4,3])
n,b,p=plt.hist([v for v in ang_sep_conv],bins=100,
range=(0,3),normed=True,histtype='step',label=labels)
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title(plot_name)
# fig_dir="J:\Pat's Projects\Dynamical Phase Transition\Figures for Paper\\nn_histogram_comparison\\"
# plt.savefig(fig_dir+plot_name[:-4]+".png", dpi=200)
plt.show()
def filter_stuck_particle_at_top(data_frame):
'''Used to filter out the location where particles slow down or pause in
Exp12031301 movies Mov_12031311 and Mov_12031312'''
x_lim = (data_frame['x pos'] < 167) | (data_frame['x pos'] > 167+20)
y_lim = (data_frame['y pos'] < 305) | (data_frame['y pos'] > 307-15)
return data_frame[x_lim & y_lim]
def filter_attached_particles(data_frame, um_conv, min_size):
'''Used to filter out the particle pair aggregate in Exp12031201 movies
Mov_12031304 and Mov_12031305'''
df = data_frame.copy()
df['nn_dist_um'] = df['nn_dist']*um_conv
second_nn = (df['nn_num'] == 1) & (df['nn_dist_um'] < min_size)
second_nn_sorted = df[second_nn].sort(columns=['frame', 'nn_dist_um'])
first_2_each_frame = second_nn_sorted.groupby('frame').head(2)
df = df.drop(first_2_each_frame.index)
df = df.drop('nn_dist_um', axis=1)
return df
'''Over glass Low L (L=0-2)'''
gl_low_l = data_index[(data_index['substrate'] == 'glass') & (data_index['L'].isin([0,1,2]))]
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", gl_low_l
for key in gl_low_l['key']:
data = store.get(key)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Glass Low L')
plt.show()
'''Over glass Mid L (L=3)'''
gl_mid_l = data_index[(data_index['substrate'] == 'glass') & (data_index['L'].isin([3]))]
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", gl_mid_l
for key in gl_mid_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Glass Mid L')
plt.show()
'''Over glass High L (L=4-6)'''
gl_high_l = data_index[(data_index['substrate'] == 'glass') & (data_index['L'].isin([4,5,6]))]
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", gl_high_l
for key in gl_high_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Glass High L')
plt.show()
'''Over plate Low L (L=0-2)'''
pl_low_l = data_index[(data_index['substrate'] == 'plate') & (data_index['L'].isin([0,1,2]))]
pl_low_l = pl_low_l[pl_low_l.key != 'Exp12031301/Mov_12031309']
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", pl_low_l
for key in pl_low_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Plate Low L')
plt.show()
'''Over plate Low L (L=3)'''
pl_mid_l = data_index[(data_index['substrate'] == 'plate') & (data_index['L'].isin([3]))]
pl_mid_l = pl_mid_l[pl_mid_l.key != 'Exp12031301/Mov_12031311']
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", pl_mid_l
for key in pl_mid_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Plate Mid L')
plt.show()
'''Over plate High L (L=4,5)'''
pl_high_l = data_index[(data_index['substrate'] == 'plate') & (data_index['L'].isin([4,5,6]))]
#pl_high_l = pl_high_l[pl_high_l.key != 'Exp12031301/Mov_12031311']
print pl_high_l
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", pl_high_l
for key in pl_high_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][0],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=["#C44E52","#4C72B0"][1],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Plate High L')
plt.show()
'''All Over Glass Data Aggregated'''
gl_all_l = pd.concat([gl_low_l, gl_mid_l, gl_high_l])
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", gl_all_l
for key in gl_all_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=['#162234','#4C72B0'][1],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=['#162234','#4C72B0'][0],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Glass All Ls')
plt.show()
'''All Over Plate Data Aggregated'''
pl_all_l = pd.concat([pl_low_l, pl_mid_l, pl_high_l])
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
print "Contributing Experiments", pl_all_l
for key in pl_all_l['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[4])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[2])+list(ang_sep[6])+ang_sep_glass_perp
um_conv=6.5/60/1.6/2
first_nn_sep_glass=plt.figure()
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,bins=100,color=['#551A12','#C44E52'][1],range=(0,3),normed=True,histtype='step',label=labels[0])
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,bins=100,color=['#551A12','#C44E52'][0],range=(0,3),normed=True,histtype='step',label=labels[1])
plt.legend()
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
plt.title('First NN Seperation Over Plate All Ls')
plt.show()
def plot_nn_hist_low_mid_high(expt_data_low_mid_high_index, data_base):
glass = (expt_data_low_mid_high_index.substrate == 'glass').all()
if glass==True:
colors=['#162234','#4C72B0']
colors=list(reversed(colors))
if glass==False:
colors=['#551A12','#C44E52']
colors=list(reversed(colors))
ang_sep_glass_par=[]
ang_sep_glass_perp=[]
um_conv=6.5/60/1.6/2
for key in expt_data_low_mid_high_index['key']:
data = store.get(key)
if key == 'Exp12031301/Mov_12031311' or key == 'Exp12031301/Mov_12031312':
data = filter_stuck_particle_at_top(data)
if key == 'Exp12031301/Mov_12031304' or key == 'Exp12031301/Mov_12031305':
data = filter_attached_particles(data, um_conv, 0.4)
ang_sep,ang_bins=nn_distance_angle_seperation_ver_2(data,8,1)
len_ang_sep=len(ang_sep)
ang_sep_glass_par=list(ang_sep[0])+list(ang_sep[len_ang_sep/2])+ang_sep_glass_par
ang_sep_glass_perp=list(ang_sep[len_ang_sep/4])+list(ang_sep[3*len_ang_sep/4])+ang_sep_glass_perp
#ang_sep_glass=[ang_sep_glass_par,ang_sep_glass_perp]
#ang_sep_conv=ang_sep*um_conv
labels=['Parellel','Perpendicular']
n_par,b_par,p_par=plt.hist(np.array(ang_sep_glass_par)*um_conv ,
bins=100,color=colors[0],
range=(0,3),normed=True,histtype='step',
label=labels[0],linewidth=3)
n_perp,b_perp,p_perp=plt.hist(np.array(ang_sep_glass_perp)*um_conv ,
bins=100,color=colors[1],
range=(0,3),normed=True,histtype='step',
label=labels[1])
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
axes=plt.gca()
axes.xaxis.labelpad=0
axes.get_xaxis().set_major_locator(matplotlib.ticker.MaxNLocator(integer=True))
axes.get_yaxis().set_major_locator(matplotlib.ticker.MaxNLocator(integer=True))
return [np.array(ang_sep_glass_par)*um_conv, np.array(ang_sep_glass_perp)*um_conv]
low_mid_high_glass_plate_nn=plt.figure(figsize=[7,4])
# Over Glass All Ls
ax1=low_mid_high_glass_plate_nn.add_subplot(241)
data_gl_all_l = plot_nn_hist_low_mid_high(gl_all_l,store)
# Glass low Ls
ax1=low_mid_high_glass_plate_nn.add_subplot(242)
data_gl_low_l = plot_nn_hist_low_mid_high(gl_low_l,store)
# Glass mid Ls
ax3=low_mid_high_glass_plate_nn.add_subplot(243)
data_gl_mid_l = plot_nn_hist_low_mid_high(gl_mid_l,store)
# Glass high Ls
ax5=low_mid_high_glass_plate_nn.add_subplot(244)
data_gl_high_l = plot_nn_hist_low_mid_high(gl_high_l,store)
# Over Plate All Ls
ax1=low_mid_high_glass_plate_nn.add_subplot(245)
data_pl_all_l = plot_nn_hist_low_mid_high(pl_all_l,store)
# Plate low Ls
ax2=low_mid_high_glass_plate_nn.add_subplot(246)
data_pl_low_l = plot_nn_hist_low_mid_high(pl_low_l,store)
# Plate mid Ls
ax4=low_mid_high_glass_plate_nn.add_subplot(247)
data_pl_mid_l = plot_nn_hist_low_mid_high(pl_mid_l,store)
# Plate high Ls
ax6=low_mid_high_glass_plate_nn.add_subplot(248)
data_pl_high_l = plot_nn_hist_low_mid_high(pl_high_l,store)
plt.tight_layout()
plt.subplots_adjust(wspace= 0.3, hspace= 0.3)
def plot_par_and_per_nn_hist_just_data(par_and_perp_list, glass=True):
'''par_and_perp_list features the parallel data first and the perpendicular
data second'''
if glass==True:
colors=['#162234','#4C72B0']
colors=list(reversed(colors))
if glass==False:
colors=['#551A12','#C44E52']
colors=list(reversed(colors))
n_par,b_par,p_par=plt.hist(par_and_perp_list[0] ,
bins=100,color=colors[0],
range=(0,3),normed=True,histtype='step',
label=labels[0],linewidth=3)
n_perp,b_perp,p_perp=plt.hist(par_and_perp_list[1] ,
bins=100,color=colors[1],
range=(0,3),normed=True,histtype='step',
label=labels[1])
plt.xlabel('Seperation (um)')
plt.ylabel('Probability Density')
axes=plt.gca()
axes.xaxis.labelpad=0
axes.get_xaxis().set_major_locator(matplotlib.ticker.MaxNLocator(integer=True))
axes.get_yaxis().set_major_locator(matplotlib.ticker.MaxNLocator(integer=True))
low_mid_high_glass_plate_nn=plt.figure(figsize=[8,4])
# Over Glass All Ls
ax1=low_mid_high_glass_plate_nn.add_subplot(241)
plot_par_and_per_nn_hist_just_data(data_gl_all_l)
# Glass low Ls
ax2=low_mid_high_glass_plate_nn.add_subplot(242)
plot_par_and_per_nn_hist_just_data(data_gl_low_l)
# Glass mid Ls
ax3=low_mid_high_glass_plate_nn.add_subplot(243)
plot_par_and_per_nn_hist_just_data(data_gl_mid_l)
# Glass high Ls
ax4=low_mid_high_glass_plate_nn.add_subplot(244)
plot_par_and_per_nn_hist_just_data(data_gl_high_l)
# Over Plate All Ls
ax5=low_mid_high_glass_plate_nn.add_subplot(245)
plot_par_and_per_nn_hist_just_data(data_pl_all_l, glass=False)
# Plate low Ls
ax6=low_mid_high_glass_plate_nn.add_subplot(246)
plot_par_and_per_nn_hist_just_data(data_pl_low_l, glass=False)
# Plate mid Ls
ax7=low_mid_high_glass_plate_nn.add_subplot(247)
plot_par_and_per_nn_hist_just_data(data_pl_mid_l, glass=False)
# Plate high Ls
ax8=low_mid_high_glass_plate_nn.add_subplot(248)
plot_par_and_per_nn_hist_just_data(data_pl_high_l, glass=False)
plt.tight_layout()
plt.subplots_adjust(wspace= 0.3, hspace= 0.3)
import re
import cPickle
%%javascript
var nb = IPython.notebook;
var kernel = IPython.notebook.kernel;
var command = "NOTEBOOK_FULL_PATH = '" + nb.base_url + nb.notebook_path + "'";
kernel.execute(command);
NOTEBOOK_FULL_PATH = "/Dynamical Phase Transition/Ana_15102801 - First NN of Expt 11201301 and 12031301 grouped L's cleanup.ipynb"
def notebook_title_info(notebook_full_path):
import re
notebook_name = os.path.split(notebook_full_path)[-1]
serial_number = re.search('(Ana_.* - )', notebook_name)
serial_number = serial_number.groups()[0][:-3]
subtitle = re.search('( - .*)', notebook_name)
subtitle = subtitle.groups()[0][3:]
return [notebook_name, serial_number, subtitle]
os.chdir('C:\Users\Scherer Lab E\Box Sync\Ring\Figure Data and Scripts\Data')
f = open('Fig_6.pkl', 'w')
notebook_info = notebook_title_info(NOTEBOOK_FULL_PATH)
data = [notebook_info, data_gl_all_l, data_gl_low_l, data_gl_mid_l, data_gl_high_l,
data_pl_all_l, data_pl_low_l, data_pl_mid_l, data_pl_high_l]
cPickle.dump(data, f)
f.close()